#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <errno.h>
#include <stdlib.h>
#include <time.h>
#include "static_lib1_fun.h"
#include "static_lib2_fun.h"
#include "so_lib1_fun.h"
#include <dlfcn.h>


int use_so_type_1()
{
    int ret=0;
    printf("in %s:\n",__func__);
    so_lib1_fun_test1();
    return ret;
}
int use_so_type_2()
{
    int ret=0;
    printf("in %s:\n",__func__);
    int i = 0;
    int (*so_test_f)(void);
    const char*soname="libso_test.so";
    void *handle = dlopen(soname,RTLD_LAZY);
    if(!handle)
    {
        printf("dlopen error :%s\n",dlerror());
        return -1;
    }
    so_test_f = dlsym(handle,"so_lib1_fun_test1");
    if(!so_test_f){
        printf("dlsym error :%s\n",dlerror());
    }else{
        so_test_f();
    }
    dlclose(handle);
    
    return 0;
/*
————————————————
版权声明：本文为CSDN博主「脱掉外衣看本质」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/dinghuiyang/article/details/103750217

*/
    return ret;
}
int use_lib3()
{
    so_lib1_fun_test1();
    static_lib2_fun_test1();
    return 0;
}
int main()
{
    int ret=0;
    // use_so_type_1();
    // use_so_type_2();
    use_lib3();
    return ret;
}